package fr.afcepf.atod18.commande.web;

import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import fr.afcepf.atod18.client.entity.Client;
import fr.afcepf.atod18.commande.entity.Commande;
import fr.afcepf.atod18.commande.entity.EtatCommande;
import fr.afcepf.atod18.utilitaires.entity.InfoSession;
import fr.afcepf.atod18.utilitaires.entity.Login;
import fr.afcepf.atod18.utilitaires.service.IServiceFacade;

@ManagedBean
@SessionScoped
public class CommandeMB {
    @ManagedProperty(value = "#{serviceFacade}")
    IServiceFacade serviceFacade;

    private InfoSession infoSession;
    private Commande commande;
    private List<Commande> listeCommandes;
    
//    private boolean creation;

    public CommandeMB() {
        super();
        System.out.println("construction MB");
    }

    @PostConstruct
    public void chargeCommande() {
        commande = new Commande();
        GregorianCalendar calendar1 = new GregorianCalendar();
        calendar1.setTime(new Date());
        commande.setDateCommandeCalendar(calendar1);
        GregorianCalendar calendar2 = new GregorianCalendar();
        calendar2.setTime(new Date());
        commande.setDateDemandeLivraison(calendar2);
        System.out.println("postconstruct de CommandeMB");
    }

    public String doCommande() {
        System.out.println("attention confirmation commande");
//        if (!creation) {
        Commande commande2 = new Commande();
        commande2.setDateCommandeCalendar(commande.getDateCommandeCalendar());
        commande2.setDateDemandeLivraison(commande.getDateDemandeLivraison());
        commande2.setClient(commande.getClient());
        commande2.setProduitSelectionnes(commande.getProduitSelectionnes());
        commande2.setTotalCommande(commande.getTotalCommande());
        commande2.setRestaurant(infoSession.getRestaurantSelectionne());
        
            serviceFacade.getServiceCommande().ajouter(commande2);
//            creation = true;
            System.out.println("attention confirmation ajout commande");
            EtatCommande etatCommande = serviceFacade.getServiceEtatCommande().rechercherParId(1);
            serviceFacade.getServiceCommande().envoyerJmsCommande(commande2.getId(),etatCommande);
//        }
        return "commandeOK";
    }
    
    public String doPreparation(){
        
        return null;
        
    }
    
    public String doLivraison(){
        
        return null;
        
    }

    public void chargerClient() {
        System.out.println("login=" + infoSession.getLogin());
        //Client client = serviceFacade.getServiceClient().rechercherParNom("login", infoSession.getLogin()).get(0);
		List<Login> logins = serviceFacade.getServiceLogin().rechercherParNom("email", infoSession.getLogin());
		if (!(logins == null || logins.size() == 0)) {
			Client client = logins.get(0).getClient();
        
	        System.out.println("client=" + client.getNom());
	        commande.setClient(client);
	        commande.setProduitSelectionnes(infoSession.getPanier().getProduitSelectionnes());
	        System.out.println("total panier=" + infoSession.getPanier().getTotalPanier());
	        commande.setTotalCommande(infoSession.getPanier().getTotalPanier());
		}
    }
    
    /**
     * @return the listeCommandes
     */
    public List<Commande> getListeCommandes() {
        listeCommandes = serviceFacade.getServiceCommande().rechercherTout();
        return listeCommandes;
    }

    /**
     * @param paramListeCommandes the listeCommandes to set
     */
    public void setListeCommandes(List<Commande> paramListeCommandes) {
        this.listeCommandes = paramListeCommandes;
    }
    /**
     * @return the commande
     */
    public Commande getCommande() {
        return commande;
    }
    /**
     * @param paramCommande
     *            the commande to set
     */
    public void setCommande(Commande paramCommande) {
        commande = paramCommande;
    }
//    /**
//     * @return the creation
//     */
//    public boolean isCreation() {
//        return creation;
//    }
//    /**
//     * @param paramCreation
//     *            the creation to set
//     */
//    public void setCreation(boolean paramCreation) {
//        creation = paramCreation;
//    }
    /**
     * @return the serviceFacade
     */
    public IServiceFacade getServiceFacade() {
        return serviceFacade;
    }
    /**
     * @param paramServiceFacade the serviceFacade to set
     */
    public void setServiceFacade(IServiceFacade paramServiceFacade) {
        serviceFacade = paramServiceFacade;
    }
    /**
     * @return the infoSession
     */
    public InfoSession getInfoSession() {
        return infoSession;
    }
    /**
     * @param paramInfoSession the infoSession to set
     */
    public void setInfoSession(InfoSession paramInfoSession) {
        infoSession = paramInfoSession;
    }
}
